/******************************************************************
 * @copyright   ©2023 广州牛师帮科技文化有限公司. All rights reserverd.
 * @file        src\network\Helper.ts
 * @date        2023/12/05 15:54
 * @author      朱剑豪
 * @description Helper，用于放置一些杂项函数
 ******************************************************************/

import type { ApiReply } from "./ApiReply";
import { ApiError } from "./ApiError";

export namespace Helper {

  /**
   * 获取清理url后query参数
   * 
   * 以下值的参数将不会出现在query上
   *    null、undefined、空字符串。
   * 
   * @param obj query参数对象，一般来说都是，一层的object
   * @returns 清理url后query参数
   */
  export function getClearParams(obj: any) {
    const ret = { ...obj };
    if (ret) {
      const keys = Object.keys(ret);
      for (let i = 0; i < keys.length; ++i) {
        const key = keys[i];
        if (ret[key] === null || ret[key] === void 0 || ret[key] === '')
          delete ret[key];
      }
    }
    return ret
  }

  /**
   * 检查接口回应是否正常
   * 
   * @param reply 接口回应
   * @returns 当接口回应正常时，返回传入的reply
   */
  export function checkReply<R extends ApiReply>(reply?: R | null): R {
    if (!reply)
      throw new Error(`服务异常，返回数据为${JSON.stringify(reply)}`)
    if (reply.code != 0 && reply.code != 200)
      throw new ApiError('' + reply.code, reply.msg || '服务异常', reply)
    return reply;
  }
}